//
// Created by Administrator on 2023/11/19.
//

#include "iostream"

using namespace std;

const int N = 1e3 + 10;
int dp[N];
int A[N];
int n;


void youhua(){
    //【用二分法进行优化 有点难 简单理解】
    // cnt表示 现有答案序列中最大的一个元素
    int cnt = 0;
    dp[cnt++] = A[0];
    for (int i = 1; i < n; ++i) {
        //如果元素可以进入序列，则进入
        if (A[i] > dp[cnt - 1]) dp[cnt++] = A[i];
        else {
            //否则用二分法找到插入位置并进行插入
            int l = 0, r = cnt - 1;
            while (l < r) {
                int mid = (l + r) >> 1;
                if (dp[mid] >= A[i]) r = mid;
                else l = mid + 1;
            }
            dp[r] = A[i];
        }
    }
    cout<<cnt;
}
int main() {
    cin >> n;

    for (int i = 0; i < n; ++i) {
        cin >> A[i];
        dp[i] = 1;
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < i; ++j) {
            if (A[i] > A[j])
                dp[i] = max(dp[i], dp[j] + 1);
        }
    }
    cout << dp[n - 1];

}